
Photo by Jason Muteham
Questions answered in this report
This notebook analyses the wrangled data created in the notebook HWDT Data Wrangle.ipynb
Data provided by the following providers:
Imports
#%%capture
#!pip install OSGridConverter
import pandas as pd
import plotly.express as px
import plotly.io as pio
import plotly.figure_factory as ff
from OSGridConverter import grid2latlong
pio.renderers.default = "vscode+notebook"
Parameter setup
Constants
import_file = 'Data/export-2022.csv'
name = "Basking Shark"
# Which OS bins to use for the maps
ll_OSGbin = 'OSG 1km'
#"open-street-map", "carto-positron", "carto-darkmatter", "stamen-terrain", "stamen-toner" or "stamen-watercolor"
px_map_tiles = 'carto-darkmatter'
mg = dict(l=20, r=20, b=20, t=100)
Fuctions
# Create df group by OSGbin
def OSGbiner(OSGbin):
df_tmp = dw.groupby([OSGbin,'Common name'])['Individual count'].sum()
df_tmp = df_tmp.reset_index()
df_tmp = df_tmp.pivot_table(index=OSGbin, values='Individual count', columns='Common name')
df_tmp = df_tmp.fillna(0)
df_tmp['Total'] = df_tmp.agg('sum', axis=1)
df_tmp = df_tmp.sort_values(by='Total')
return df_tmp
Import Data
dw = pd.read_csv(import_file, parse_dates=["Date"])
fig = px.bar(dw.query('`Common name` == "Basking Shark"').groupby('Date year')['Individual count'].agg('sum'),
y='Individual count', title= 'The number of ' + name + "s spotted each year", text_auto=True, height=500,)
fig.update_layout(yaxis_title='Count of ' + name + 's', xaxis_title='', showlegend=False)
fig.update_traces(hovertemplate=' Year %{x}, %{y} spotted',marker_line_color='darkgreen', marker_line_width=1.0)
fig.show()
print(dw[dw["Common name"] == name].groupby('Common name')['Individual count'].agg('sum'))
Common name Basking Shark 1979.0 Name: Individual count, dtype: float64
A. A total of 1979 Basking Sharks have been observed by the HWDT between 2003 & 2021.
The peak year for sightings was 2010 there has been a sharp decline in observation since 2016. As the HWDT collect observation from members of the public COVID-19 restrictions could play a part in the 2020 & 2021 figures.
fig = px.density_mapbox(dw[dw['Common name']==name], lat='Latitude',lon='Longitude', z='Individual count',
radius=20, center=dict(lat=56.5, lon=-6.5), color_continuous_scale='blues_r', zoom=6, mapbox_style=px_map_tiles,
title = 'Heat map of ' + name + ' observations between 2003-2021', height=670)
fig.update_coloraxes(cmax=30, cmin=1, showscale=False)
fig.update_layout(margin=mg)
fig.update_traces(hovertemplate='%{z} Basking Sharks')
fig.show()
# Build Low level plot data
df_bin = OSGbiner(ll_OSGbin)
dw_plot = df_bin.loc[df_bin[name] > 0][[name]]
dw_plot.columns = ["Total"]
max_osgrid = dw_plot.loc[dw_plot['Total'].max()==dw_plot['Total']].reset_index().iloc[0,0]
lats = []
longs = []
for idx in dw_plot.index:
lalo = grid2latlong(idx)
lats.append(lalo.latitude)
longs.append(lalo.longitude)
dw_plot['Latitude'] = lats
dw_plot['Longitude'] = longs
dw_plot_low = dw_plot.copy()
# Plotly Bubble Map
cp = {'lat':56.5,'lon':-6.7}
plot_size = dw_plot['Total']
fig = px.scatter_mapbox(dw_plot_low, lat="Latitude", lon="Longitude", center=cp, color=plot_size, color_continuous_scale='blues_r',
opacity=0.8, zoom=8, size="Total", size_max=16, title=name+' hot spots 2003-2021', height=670,labels={"color": name+'s',"Total":name+'s',"Latitude":name+'s',"Longitude":name+'s'})
fig.update_coloraxes(colorbar_ticklabelposition='inside',colorbar_ticks='inside',cmax=20,cmin=1,showscale=False)
fig.update_layout(mapbox_style=px_map_tiles,margin=mg)
#fig.update_traces(hovertemplate='%{y}, %{color}')
fig.show()
A. The majority of Basking Shark observations have been made in the waters around the islands of Col and Tiree, which would suggest that these islands would be a good starting place to encounter Basking Sharks.